
package com.joolun.cloud.mall.api.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.joolun.cloud.common.core.util.R;
import com.joolun.cloud.mall.common.dto.UserInfoLoginDTO;
import com.joolun.cloud.mall.common.entity.UserInfo;
import com.joolun.cloud.weixin.common.dto.LoginDTO;
import com.joolun.cloud.weixin.common.dto.WxOpenDataDTO;
import com.joolun.cloud.weixin.common.entity.ThirdSession;
import javax.servlet.http.HttpServletRequest;

/**
 * 商城用户
 *
 * @author www.joolun.com
 * @date 2019-12-04 11:09:55
 */
public interface UserInfoService extends IService<UserInfo> {

	/**
	 * 小程序用户登录
	 * @param loginDTO
	 */
	UserInfo loginMa(LoginDTO loginDTO);

	/**
	 * 公众号用户登录
	 * @param loginDTO
	 */
	UserInfo loginMp(LoginDTO loginDTO, HttpServletRequest request);

	/**
	 * 通过微信用户更新商城用户
	 * @param wxOpenDataDTO
	 * @return
	 */
	UserInfo updateByMa(WxOpenDataDTO wxOpenDataDTO);

	/**
	 * 通过微信公众号网页授权更新用户信息
	 * @param wxOpenDataDTO
	 * @return
	 */
	UserInfo updateByMp(WxOpenDataDTO wxOpenDataDTO);

	/**
	 * 新增商城用户
	 * @param userInfo
	 * @return
	 */
	UserInfo saveUserInfo(UserInfo userInfo);

	/**
	 * 小程序或公众号通过手机号登录商城
	 * @param thirdSession
	 * @param phone
	 */
	UserInfo loginByPhoneWx(ThirdSession thirdSession, String phone, String key, String SharerUserCode);

	/**
	 * 手机号登录
	 * @param request
	 * @param userInfoLoginDTO
	 */
	UserInfo loginByPhone(HttpServletRequest request, UserInfoLoginDTO userInfoLoginDTO);

	/**
	 * 账号登录
	 * @param request
	 * @param userInfo
	 */
	UserInfo login(HttpServletRequest request, UserInfo userInfo);

	/**
	 * 退出登录
	 * @param request
	 */
	UserInfo logout(HttpServletRequest request);

	/**
	 * 注册账号
	 * @param userInfo
	 */
	UserInfo register(UserInfo userInfo);

	/**
	 * 统一更新操作用户积分
	 * @param userId 用户ID
	 * @param posts 积分变量。+加，-减
	 */
	void updatePoints(String userId, Integer posts);

	IPage<UserInfo> page1(IPage<UserInfo> page, UserInfo userInfo);

	/**
	 * 更新用户省市
	 */
	void updateProCity(HttpServletRequest request, String userId);
}
